//
// Created by HP on 2025/11/5.
//

#ifndef FLIGHTSERVER_UTIL_H
#define FLIGHTSERVER_UTIL_H
#include <iostream>
#include <iomanip>
#include <ctime>
#include <map>
#include <vector>
#include <sstream>
#include <cstdio>

std::string getFormattedDate();

std::string generateVerificationCode();

std::vector<std::string> split(const std::string& str, char delimiter);

// 旧版简单map转JSON（保持兼容性）
std::string mpToJson(const std::map<std::string, std::string>& mp);

// JsonValue类已移至独立的JsonValue.h文件
// 如需使用JsonValue，请包含 "JsonValue.h"
#include "JsonValue.h"

std::string addDay(const std::string& date, int days) ;

std::string getToday();

// 旧版函数（保持兼容性）
std::string vecToStr(const std::vector<std::string>& vec);
std::string vecToStr(const std::vector<std::map<std::string,std::string>>& vec);

std::string TypeToTicketsType(const std::string& Type);

std::string TicketsTypeToType(const std::string& Type);

std::vector<std::string> strTovec(const std::string & vec);

bool VaildTicket(std::string& ticket);

std::string getFormattedTime();

std::string getFormattedDateTime() ;
// 核心实现：给 YYYY/MM/DD HH:MM:SS 格式的时间添加指定小时数
std::string addHour(const std::string& time, int hours) ;


// 新增：添加月份（支持正负值，自动处理跨月/跨年）
std::string addMonth(const std::string& time, int months);

// 新增：添加年份（支持正负值，自动处理闰年）
std::string addYear(const std::string& time, int years);

/**
 * 重置时间字符串的小时部分，并保持分钟和秒为00
 * @param time 输入的时间字符串，格式为"YYYY-MM-DD HH:MM:SS"
 * @return 返回修改后的时间字符串，小时部分保持不变，分钟和秒被设置为00
 */
std::string reSetHour(const std::string& time) ;

/**
 * @brief 重置日期时间为当月第一天
 * 
 * 该函数接收一个日期时间字符串，将其重置为当月的第一天，并将时间部分设置为00:00:00
 * 
 * @param time 输入的日期时间字符串，格式为"YYYY-MM-DD HH:MM:SS"
 * @return std::string 返回重置后的日期时间字符串，格式为"YYYY-MM-DD HH:MM:SS"，其中日期为当月第一天
 */
std::string reSetMonth(const std::string& time) ;

/**
 * 重置日期字符串为当年的第一天
 * @param time 输入的日期时间字符串，格式为"YYYY-MM-DD HH:MM:SS"
 * @return 返回重置后的日期时间字符串，年份与输入相同，其他部分被重置为"01-01 00:00:00"
 */
std::string reSetYear(const std::string& time) ;

std::string reSetDay(const std::string& time) ;

std::string ticketTypeToStr(const std::string& type);

//std::vector<std::string> strTovec(const std::string & vec, const std::string& split);
#endif //FLIGHTSERVER_UTIL_H
